import pandas as pd


# 方法1：读取时指定数据类型（推荐）
# 指定long类型字段为字符串类型，避免精度丢失
dtype_dict_a = {
    '资源id': str,  # 将ID字段设为字符串
    '最新快照id': str,
}

dtype_dict_b = {
    '包id': str,   # 将ID字段设为字符串
    # # 其他可能的long类型字段也设为str
    '讲id': str,
    '讲播放时长': str,
    '课后习题': str,
    '导学案': str,
    # 'tutorial_id': str
}


# 读取Excel文件
df_a = pd.read_excel('D:\\project_file\\20251016周末智学导数据\\高一高二资源数据.xlsx',  dtype=dtype_dict_a)  # 替换为实际文件路径
df_b = pd.read_excel('D:\\project_file\\20251016周末智学导数据\\包和讲数据\\2025-10-16-10-34-36_EXPORT_XLSX_21830650_578_0.xlsx',
                     dtype=dtype_dict_b)  # 替换为实际文件路径

# 直接进行左连接，保留A表的所有记录，B表的多条记录会平铺展示
result = df_a.merge(df_b, left_on='资源id', right_on='包id', how='left')

# 可选：删除重复的course_id列
result = result.drop('包id', axis=1)

# 保存结果到新的Excel文件
result.to_excel('周末智学资源数据包含讲20251016.xlsx', index=False)

print("数据合并完成！")
print(f"A表原始记录数: {len(df_a)}")
print(f"B表原始记录数: {len(df_b)}")
print(f"合并后记录数: {len(result)}")

# 显示合并效果统计
merge_stats = result.groupby('资源id').size()
print(f"\n每个resource_id对应的记录数统计:")
print(f"平均每个resource_id有 {merge_stats.mean():.1f} 条关联记录")
print(f"最多关联记录数: {merge_stats.max()}")

# 显示前几行结果
print("\n合并结果预览:")
print(result.head(10))